import org.apache.hadoop.hive.ql.exec.UDF;

public class IdCardBirthdayUDF extends UDF {
    // 常量内部管理类
    private static final class CONSTAINS {
        // 失败标识符
        private static final String FAILED = "false";
        // 15位身份证格式校验正则
        private static final String REG_IDNUMBER_15 = "^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}";
        // 18位身份证格式校验正则
        private static final String REG_IDNUMBER_18 = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
    }

    /**
     * 返回出生日期
     *
     * @param sfzjhm 身份证号
     * @return false字符串表示没取到，取到则返回无连接符出生日期(如19990909)
     */
    public String evaluate(String sfzjhm) {
        if (sfzjhm != null && sfzjhm.matches(CONSTAINS.REG_IDNUMBER_15)) {
            return "19" + sfzjhm.substring(6, 12);
        }
        if (sfzjhm != null && sfzjhm.matches(CONSTAINS.REG_IDNUMBER_18)) {
            return sfzjhm.substring(6, 14);
        }
        return CONSTAINS.FAILED;
    }
}
